题目分析
本题是周赛的第三题,我感觉比第二题简单。本周的双周赛最后一题就是双指针,这又来了一题双指针,希望小伙伴们可以好好掌握双指针的解题模板。
双指针
子数组内每对元素按位与都是0,说明子数组内所有元素相与也是0。
因此我们每次将左指针移动一个距离,然后去寻找最右边符合条件的索引。
和双周赛最后一题的区别是,那道题是右指针移动一个距离,寻找最左边的索引。当然两种方法都可以,只不过可能存在一种好写另一种复杂的情况。
双周赛那道题,如果左边移动,右边寻找时,如果右边加入队列后,计算不满足条件需要出队列,因此很麻烦。
本题如果右边移动,左边寻找,因为右边不满足条件不能移动,所以本题只能左边移动。寻找满足条件的最右边。
算法的时间复杂度为$ O(n) $,空间复杂度为O(1)。
1 | class Solution { |
刷题总结
双指针的题目有一定的模板,一般是一个指针每次移动一步,另一个指针寻找最端点的位置。要不是左指针每次移动一个元素,寻找满足条件的右指针的索引(下一个索引不满足)。要不就是右指针每次移动一个元素,寻找满足条件的左指针的索引(上一个索引不满足)。